Validando dados de empenho do Portal da Transparência
(2019-2022)
Coletamos os dados de empenhos do Portal da Transparência e comparamos a agregação dos valores empenhados por ano com os mesmos dados consultados na plataforma SIGA. Temos dúvidas se a plataforma SIGA considera anulações de empenhos na demonstração de valores agregados a partir de 2021, pois o campo especie_empenho está marcado como "Não aplicável".
O campo especie_empenho é definido no dicionário de dados do Portal da Transparência como:
Campo existente até 2020 indicando se o Empenho era de Reforço, Cancelamento, Estorno, Anulação ou Original. A partir de 2021, as alterações no Empenho são registradas em histórico do próprio Empenho original (planilha AAAAMMDD_Despesas_ItemEmpenhoHistorico.csv).
Dados
Empenhos - SIGA/Senado
Consultando no SIGA, podemos ver os valores empenhados para para unidade gestora: 257052 - DISTRITO SANIT.ESP.INDIGENA - YANOMAMI
Código
siga_senado <- tibble(
ano_emissao_empenho = 2019:2023,
base = "SIGA SENADO",
valor_do_empenho_convertido_pra_r = c(
43039167,
42643267,
65805003,
60882543,
29754205
))
siga_senado %>%
ggplot(aes(
x = ano_emissao_empenho,
y = valor_do_empenho_convertido_pra_r,
fill = base,
color = after_scale(darken(fill, .4))
)) +
geom_col(show.legend = FALSE) +
geom_text(aes(label = reais(valor_do_empenho_convertido_pra_r)), nudge_y = 2e6) +
scale_y_continuous(labels = reais, expand = c(0, 0), limits = c(0, 7e7)) +
scale_fill_manual(values = c("SIGA SENADO" = cores_aep[["laranja"]])) +
labs(
title = "Empenhos divulgados no Portal SIGA-SENADO",
y = "Valores empenhados", x = "Ano (SIAFI)"
)Empenhos - Portal da Transparência
Foram baixados os empenhos das planilhas diárias do portal da transparência e aplicado um filtro para unidade gestora: 257052 - DISTRITO SANIT.ESP.INDIGENA - YANOMAMI
Os valores empenhados não vão bater com o valor do portal SIGA, pois os empenhos são classificados de acordo com o campo especie_empenho, abaixo nós podemos observar a somatória de cada espécie de empenho, note que não há descontos para empenhos de anulação, cancelamento, estorno, etc. (esses valores deveriam ser negativos). Outro ponto importante é que a partir de 2021 a marcação do campo especie_empenho é descontinuada a partir de 2021.
Código
empenhos %>%
count(
ano_emissao_empenho = year(data_emissao),
especie_empenho, sort = TRUE
) %>%
complete(ano_emissao_empenho, especie_empenho, fill = list(n = 0)) %>%
mutate(especie_empenho = ordered(especie_empenho, levels = names(cores_especie_empenhos_raw))) %>%
ggplot(aes(
x = especie_empenho,
y = n,
fill = especie_empenho,
color = after_scale(darken(fill, .4))
)) +
geom_col(position = "dodge", show.legend = FALSE) +
geom_text(aes(label = n), vjust = -1) +
facet_wrap(~ ano_emissao_empenho, nrow = 1) +
scale_fill_manual(values = cores_especie_empenhos_raw) +
scale_y_continuous(expand = c(0.01, 0), limits = c(0, 400)) +
labs(
title = "Quantidade de empenhos por \"espécie\"",
subtitle = "A partir de 2021 o campo `especie_empenho` passa a não ter mais validade na classificação de empenhos",
y = "Quantidade de empenhos",
x = NULL
) +
theme(
axis.text.x = element_text(hjust = 1, angle = 45)
)Código
empenhos %>%
count(
ano_emissao_empenho = year(data_emissao),
especie_empenho,
wt = valor_do_empenho_convertido_pra_r,
sort = TRUE
) %>%
complete(ano_emissao_empenho, especie_empenho, fill = list(n = 0)) %>%
mutate(especie_empenho = ordered(especie_empenho, levels = names(cores_especie_empenhos_raw))) %>%
ggplot(aes(
x = especie_empenho,
y = n,
fill = especie_empenho,
color = after_scale(darken(fill, .4))
)) +
geom_col(position = "dodge", show.legend = FALSE) +
geom_text(
data = . %>% filter(n > 0),
nudge_y = 2e6, hjust = 0, angle = 90,
aes(label = reais_milhoes(n))
) +
facet_wrap(~ ano_emissao_empenho, nrow = 1) +
scale_fill_manual(values = cores_especie_empenhos_raw) +
scale_y_continuous(expand = c(0.01, 0), limits = c(0, 9e7), labels = reais) +
labs(
title = "Valores empenhados por \"espécie\"",
subtitle = "Empenhos de anulação sempre possuem valor positivo",
y = "Valor empenhado",
x = NULL
) +
theme(
axis.text.x = element_text(hjust = 1, angle = 45)
)Portanto, para obtermos os valores mais próximos daqueles do portal SIGA, devemos tratar os dados tornando negativos os valores de anulações, cancelamentos, estornos e inválidos.
Aplicando a correção acima só conseguimos tratar dos empenhos nos anos de 2019 e 2020. Não sabemos, a priori, quais empenhos foram anulados a partir de 2021.
Código
empenhos %>%
mutate(
valor_do_empenho_convertido_pra_r = corrige_valores(
esp = especie_empenho,
vlr = valor_do_empenho_convertido_pra_r
)) %>%
count(
ano_emissao_empenho = year(data_emissao),
base = "Portal da transparência\n(corrigido)",
wt = valor_do_empenho_convertido_pra_r,
name = "valor_do_empenho_convertido_pra_r"
) %>%
bind_rows(siga_senado) %>%
ggplot(aes(
x = "",
y = valor_do_empenho_convertido_pra_r,
fill = base,
color = after_scale(darken(fill, .4))
)) +
geom_col(position = "dodge", alpha = .8) +
geom_text(
position = position_dodge(width = .9),
vjust = -1,
hjust = 0,
size = 4,
fontface = "bold",
angle = 45,
aes(label = if_else(
valor_do_empenho_convertido_pra_r > 0,
scales::number(valor_do_empenho_convertido_pra_r, big.mark = ".", decimal.mark = ","),
"Sem dados"
))) +
scale_y_continuous(
labels = ~ scales::number(., big.mark = ".", decimal.mark = ","),
limits = c(0, 9e7),
expand = c(0, 0),
breaks = seq(0, 6e7, 2e7)
) +
scale_fill_manual(values = c(
"Portal da transparência\n(corrigido)" = cores_aep[["rosa"]],
"SIGA SENADO" = cores_aep[["laranja"]]
)) +
labs(
title = "Soma de `valor_do_empenho_convertido_para_r` (em R$ - 2019-2023)",
subtitle = glue(
"\n- A somatória realizada nos valores de empenho no SIGA/Senado ",
"não leva em consideração os empenhos de anulação e ",
"\ndos anos de 2021 e 2022. ",
"Para os anos de 2019 e 2020 os empenhos de anulação estão ",
"descontados da somatória.\n\n"
),
x = "Ano",
fill = "Base consultada"
) +
theme(
legend.position = "top",
legend.title.align = .5,
strip.placement = "outside",
strip.text = element_text(face = "bold"),
panel.spacing = unit(.5, "lines")
) + #c(.92, .8)) +
facet_wrap(~ano_emissao_empenho, nrow = 1, scales = "free_x", strip.position = "bottom")Possível solução
A API do Portal da Transparência possui um endpoint para consulta de histórico dos itens empenhados. Esse histórico só pode ser consultado para empenhos a partir de 2021 e um dos campos é fase_operacao, onde podemos saber se o item empenhado diz respeito à inclusão, reforço ou anulação do item.
Código
library(DT)
readRDS(here("data/empenhos-item-historico.rds")) %>%
select(-aaaammdd, -error, -id_empenho) %>%
mutate(
tipo_operacao = as.factor(tipo_operacao),
codigo_empenho = glue('<a href = "https://portaldatransparencia.gov.br/despesas/empenho/{codigo_empenho}">{codigo_empenho}</a>')
) %>%
datatable(rownames = FALSE,
filter = "top",
escape = FALSE,
options = list(pageLength = 10, searchHighlight = TRUE)) %>%
formatCurrency(c("valor_total_item", "valor_unitario_item"), currency = "R$ ", mark = ".", dec.mark = ",") %>%
formatStyle(columns = 1:7, fontSize = "70%")O esquema de dados abaixo apresenta os cruzamentos de tabelas necessários para se obter valores empenhados considerando os empenhos anulados.
Esquema de dados
classDiagram
direction UD
class empenhos_por_fase_operacao {
descrição: "dataset de empenhos na DSEI-Y em formato long | 2021 - 2022"
data_operacao
codigo_empenho
fase_operacao : (empenho original/reforço/anulação)
valor_operacao
tipo_operacao : (empenho)
}
class empenhos_item_historico {
descrição : "dataset com histórico de itens empenhados na DSEI-Y | 2021-2022"
dataset: data/empenhos-item-historico.rds
cod_fonte: src/17-funcao-get-item-historico.R
tipo_operacao : (Inclusão, Reforço, Anulação)
origem: API (portal da transparência)
}
class empenhos {
descrição : "dataset de empenhos da DSEI-Y"
dataset: data/empenhos.rds
cod_fonte: src/10-extrai-e-abre-csvs-de-empenho.R
origem: site - csvs diários (portal da transparência)
especie : (Não se aplica)
}
empenhos_item_historico "n" *--> "1" empenhos : incluídos_reforçados_ou_anulados
empenhos "1" *--> "n" empenhos_por_fase_operacao : por_fase_de_operação
O gráfico abaixo mostra os resultados comparando dados coletados no Portal da Transparência em duas ocasiões (Crawler dez.22 e mar.23), mais os dados consultados no SIGA e a análise da TB que descontou os valores de empenhos anulados para 2021 e 2022 conforme o esquema acima. Ao descontar os valores, alguns empenhos apresentaram somatórias de itens divergentes do valor do documento de empenho (são os “empenhos problemáticos” que estão nesta planilha)